package cz.vse.adventura.po1715.xburj54_bursa.hra;

import cz.pecinovsky.english.pojj.adv_framework.game_gui.IObjectG;
import cz.vse.adventura.po1715.xburj54_bursa.data.predmety.PredmetyPkg;
import java.net.URL;
import javax.swing.Icon;
import javax.swing.ImageIcon;
//import cz.pecinovsky.english.pojj.adv_framework.game_txt.IObject;


/*******************************************************************************
 * Instance třídy {@code Předmět} představuji předměty v místnostech.
 * Některé z nich jsou přenositelné, jiné ne.
 *
 * @author Jan Bursa
 * @version 1.02,  16.12.2010
 */
public class Předmět implements IObjectG
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================

    /** Prefix určující, že předmět nepůjde zvednout. */
    public static final char NEZVEDNUTELNÝ = '#';

    /** Univerzílní předmět zastupující všechny nezvednutelné předměty. */
    public static final Předmět PEVNÝ = new Předmět( "#PEVNÝ" );

    /** Předměty, které jsou v průběhu hry přidávány. */
    public static final Předmět KLÍČ = new Předmět ("Klíč");
    public static final Předmět DRÁT = new Předmět ("Drát");
    public static final Předmět KLÍČEK = new Předmět ("Klíček");
    public static final Předmět KAMÍNEK = new Předmět ("Kamínek");
    public static final Předmět KAMÍNEK2 = new Předmět ("Kamínek");
    public static final Předmět TREZOR = new Předmět ("Trezor");

//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================

     private final String  název;
     private final boolean zvednutelný;
     private final ImageIcon obrázek;

//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================

    /***************************************************************************
     * Vrátí název dané instance.
     *
     * @return Název instance
     */
    @Override
    public String getName()
    {
        return název;
    }

    /***************************************************************************
     * Vrátí informaci o tom, dá-li se předmět zvednout a vložit do batohu.
     *
     * @return {@code true} - dá se zvednout, jinak {@code false}
     */
    @Override
    public boolean isTransportable()
    {
        return zvednutelný;
    }


//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří nový předmět se zadaným názvem a zvednutelností
     * Je-li prvním znakem názvu přemětu znak # označující nezvednutelné
     * předměty, bude z názvu odebrán a předmětu bude označen za nezvednutelný.
     *
     * @param název Název předmětu <br>
     *              - začíná-li znakem #, není předmět zvednutelný
     */
    public Předmět(String název)
    {
        boolean zved = true;

        switch (název.charAt(0))
        {
            case NEZVEDNUTELNÝ:
                název = název.substring(1);
                zved = false;
                break;
        }
        this.zvednutelný = zved;
        this.název = název;

        String výsledek;
        URL url = PredmetyPkg.class.getResource(název+".JPG");
        if (url == null) {
            obrázek = null;
            výsledek = "Obrázek nenačten";
        }
        else {
            this.obrázek = new ImageIcon(url);
            výsledek = "Obrázek načten";
        }
        System.out.println("   " + výsledek + " obrázek předmětu: " + název);
    }



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================

     /***************************************************************************
     * Vrátí název dané instance.
     *
     * @return Nazev instance
     */
    @Override
    public String toString()
    {
        return název;
    }

    /***************************************************************************
     * Vrátí odkaz na obrázek daného předmětu.
     *
     * @return  Požadovaný odkaz
     */
//    @Override
    @Override
    public Icon getPicture() {
        return obrázek;
    }
}    
//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== INTERNÍ DATOVÉ TYPY =======================================================
//== TESTOVACÍ METODY A TŘÍDY ==================================================
//
//     /***************************************************************************
//      * Testovací metoda.
//      */
//     public static void test()
//     {
//         Předmět x = new Předmět();
//     }
//     /** @param args Parametry příkazového řádku - nepoužívané. */
//     public static void main(String[] args)  {  test();  }

